package com.bear.generator;

import com.bear.model.MainTemplateConfig;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

/**
 * 动态文件生成
 */
public class DynamicGenerator {
//    public static void main(String[] args) throws IOException, TemplateException {
//        // new 出 Configuration 对象，参数为 FreeMarker 版本号
//        Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);
//        //项目路径
//        String projectPath = System.getProperty("user.dir") + File.separator + "bear-generator-basic";
////        System.out.println(projectPath);
//
//        File file = new File(projectPath, "src/main/resources/templates");
//
//        // 指定模板文件所在的路径
//        configuration.setDirectoryForTemplateLoading(file);
//
//        // 设置模板文件使用的字符集
//        configuration.setDefaultEncoding("utf-8");
//
//        // 创建模板对象，加载指定模板
//        Template template = configuration.getTemplate("MainTemplate.java.ftl");
//
//        // 创建数据模型
//        MainTemplateConfig mainTemplateConfig = new MainTemplateConfig();
////        mainTemplateConfig.setAuthor("bear");
//        // 不使用循环
//        mainTemplateConfig.setLoop(true);
//        mainTemplateConfig.setOutputText("求和结果：");
//
//        // 生成
//        Writer out = new FileWriter("MainTemplate.java");
//        template.process(mainTemplateConfig, out);
//
//        // 生成文件后别忘了关闭哦
//        out.close();
//    }


    public static void main(String[] args) throws TemplateException, IOException {
            String projectPath = System.getProperty("user.dir") + File.separator + "bear-generator-basic";
            String inputPath = projectPath + File.separator + "src/main/resources/templates/MainTemplate.java.ftl";
            String outputPath = projectPath + File.separator + "MainTemplate.java";
            MainTemplateConfig mainTemplateConfig = new MainTemplateConfig();
            mainTemplateConfig.setAuthor("bear");
            mainTemplateConfig.setLoop(false);
            mainTemplateConfig.setOutputText("求和结果：");
            doGenerate(inputPath, outputPath, mainTemplateConfig);
    }

    /**
     * 生成文件
     * @param inputPath 模板文件输入路径
     * @param outputPath 生成文件输出路径
     * @param model 数据模型
     */
    public static void doGenerate(String inputPath, String outputPath, Object model) throws IOException, TemplateException {
        // new 出 Configuration 对象，参数为 FreeMarker 版本号
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);

        //指定模板文件所在的路径
        File templateDir = new File(inputPath).getParentFile();//到达模板文件的父级目录，在这里时templates
        System.out.println(templateDir);

        // 指定模板文件所在的路径
        configuration.setDirectoryForTemplateLoading(templateDir);

        // 设置模板文件使用的字符集
        configuration.setDefaultEncoding("utf-8");

        // 创建模板对象，加载指定模板
        String templateName = new File(inputPath).getName();
        Template template = configuration.getTemplate(templateName);

        // 创建数据模型

        // 生成
        Writer out = new FileWriter(outputPath);
        template.process(model, out);//直接传入我们的数据模型

        // 生成文件后别忘了关闭哦
        out.close();
    }
}
